/**
 * FileName: Knife4jConfiguration
 * Author: Mr.Wang
 * Date: 2025/10/16 16:49
 * Description:
 * History:
 */
package org.test.device.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.beans.factory.annotation.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * 〈一句话功能简述〉<br>
 * 〈在线接口文档自动配置类〉
 *
 * @author Mr.Wang
 * @create 2025/10/16
 * @since 1.0.0
 */
@Slf4j
@Configuration
public class Knife4jConfig {

    // 从配置文件获取当前环境的基础URL
    @Value("${knife4j.base-url:http://localhost:8080}")
    private String baseUrl;

    /**
     * 自定义 OpenAPI 信息（接口文档的标题、作者、版本等）
     */
    @Bean
    public OpenAPI customOpenAPI() {
        // 创建环境信息扩展属性
        Map<String, Object> envExtensions = new HashMap<>();
        envExtensions.put("baseUrl", baseUrl);
        envExtensions.put("docUrl", baseUrl + "/doc.html");

        return new OpenAPI()
                .info(new Info()
                        .title("Device 设备管理系统 API 文档")
                        .description("""
                                ### 系统核心能力
                                1. **设备通信**：支持 Netty（TCP）和 MQTT 协议，实现设备实时连接与数据上报；
                                2. **双数据库架构**：
                                   - MySQL：存储设备基础信息（设备ID、型号、状态等）；
                                   - TDengine：存储设备时序数据（如温度、湿度等高频采集数据）；
                                3. **异步通知**：通过 STOMP 协议推送设备状态变更、数据处理结果给前端。
                                
                                ### 接口使用说明
                                - 所有接口返回格式统一为 JSON，包含 `code`（状态码）、`message`（描述）、`data`（业务数据）；
                                - 需认证接口需在请求头携带 `Authorization: Bearer {token}`（测试环境可使用测试Token：test_token_123）。
                                
                                ### 联系我们
                                - 邮箱：suplersta@gmail.com
                                - 项目地址：https://gitee.com/wxbLymm/device.git
                                
                                ### Jenkins 集成
                                - 项目已配置 Jenkins 持续集成，每次代码提交会触发自动构建与测试。
                                - 地址：http://14.103.171.191:9090/
                                
                                ### 其他
                                - 接口文档基于 Knife4j 自动生成，支持在线调试与 Swagger 3.0 规范。
                                """)
                        .version("1.0.0")
                        .contact(new Contact()
                                .name("Mr.Wang")
                                .email("suplersta@gmail.com")
                                .url("https://gitee.com/wxbLymm/device.git")
                        )
                        .extensions(Map.of("envExtensions", envExtensions))
                );
    }
}